package org.droiddraw.gui; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.dnd.DnDConstants; import java.awt.dnd.DragGestureEvent; import java.awt.dnd.DragGestureListener; import java.awt.dnd.DragSource; import java.awt.dnd.DragSourceDragEvent; import java.awt.dnd.DragSourceDropEvent; import java.awt.dnd.DragSourceEvent; import java.awt.dnd.DragSourceListener; import java.awt.dnd.InvalidDnDOperationException; import java.awt.image.BufferedImage; import javax.swing.JPanel; import org.droiddraw.AndroidEditor; import org.droiddraw.widget.Widget; public class WidgetPanel extends JPanel implements DragGestureListener, DragSourceListener { private static final long serialVersionUID = 1L; Widget w; Dimension d; DragSource ds; BufferedImage img; int x, y; public WidgetPanel(Widget w) { this.w = w; d = new Dimension(w.getWidth(), w.getHeight()); this.w.setPosition(0, 0); this.setToolTipText(w.getTagName()); this.ds = DragSource.getDefaultDragSource(); this.ds.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY, this); this.img = new BufferedImage(w.getWidth(), w.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); Graphics g = img.getGraphics(); w.paint(g); } @Override public Dimension getMinimumSize() { return d; } @Override public Dimension getPreferredSize() { return d; } @Override public void paint(Graphics g) { w.paint(g); } public void dragGestureRecognized(DragGestureEvent e) { try { Transferable t = new StringSelection(w.getTagName()); ds.startDrag(e, DragSource.DefaultCopyDrop, img, new Point(x,y), t, this); //ds.startDrag(e, DragSource.DefaultCopyDrop, t, this); } catch (InvalidDnDOperationException ex) { AndroidEditor.instance().error(ex); } } public void dragDropEnd(DragSourceDropEvent e) {} public void dragEnter(DragSourceDragEvent e) {} public void dragExit(DragSourceEvent e) {} public void dragOver(DragSourceDragEvent e) {} public void dropActionChanged(DragSourceDragEvent arg0) {} }